#ifndef INDEXADOR_H_
#define INDEXADOR_H_

#define MAX_REGISTROS 4000

#include "RegistroIndiceMemoria.h"
#include "AlmacenamientoIndice.h"
#include "AlmacenamientoDocFrec.h"
#include "LexicoDocs.h"
#include "AlmacenamientoDocs.h"
#include "Lexico.h"
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>

using namespace std;

class cHTMLParser;

class Indexador
{
	private:
		vector <RegistroIndiceMemoria *> indice;
		vector <RegistroIndiceDocumentos *> indiceDocs;
		int documentoActual;
		AlmacenamientoIndice * almacenamientoIndice;
		AlmacenamientoDocs * almacenamientoDocs;
		Lexico *lexico;
		LexicoDocs * lexicoDocs;
		AlmacenamientoDocFrec *  almacenamientoDocFrec;
		unsigned int numRegsIndiceParcial;
		int offsetLexicoDocs;
	
		int actualizarLista();
		void verificarEspacioIndiceParcial();
		void guardarIndiceParcial();
		void guardarIndiceDocumentos();
		void crearIndexador (string dataPath, int numRegsIndiceParcial, JNIEnv* jniEnv, jobject jniObj, bool mode);
		void insertarRegDocs(int offset);
		int busqueda_indice(char * termino, int *posicion_a_insertar);
		
	public:
		Indexador(string dataPath, JNIEnv* jniEnv, jobject jniObj, bool mode);
		Indexador(string dataPath, int numRegsIndiceParcial, JNIEnv* jniEnv, jobject jniObj);
		virtual ~Indexador();

		void nuevoDocumento(string nombreDoc);
		int insertarTermino(char * termino); /* El termino debe estar normalizado*/
		void generarIndice();
		tListaDocDistancias* getDocs(int offset, int frec);
};

#endif /*INDEXADOR_H_*/
